/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kn.cstf2.assign.Server;

import kn.cstf2.cop.Server.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import kn.cstf2.assign.Bean.ListaTablaBean;
import kn.cstf2.assign.Bean.T_usersBean;
import kn.cstf2.global.Utils.CstF2Exception;
import kn.cstf2.global.db.Operations.OperacionesDB;
import kn.cstf2.main.Bean.Joinusertransition;
import kn.mx.cstf2.sql.AssignSql;


/**
 *
 * @author user1
 */
public class AssignServer {


    OperacionesDB odb = new OperacionesDB();

    public ArrayList<T_usersBean> obtenerListaNombresDataFromTusers(String nombreocorreo) {
        ArrayList<T_usersBean> listaNombresTusers;

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCT_DATAFROM_TUSERS;
        int index = 1;

        String newnombreocorreo = nombreocorreo.replace(" ", "%");

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setString(index++, "%" + newnombreocorreo + "%");
            /*LINEA PARA AGREGAR BUSQUEDA POR CORREO
             ps.setString(index++, "%" + newnombreocorreo + "%");
             */
            rs = ps.executeQuery();
            listaNombresTusers = AdaptadorAssign.obtenerListaNombresDataFromTusers(rs);

            for (T_usersBean a : listaNombresTusers) {
                System.out.println(a.getId() + " - " + a.getUsername() + a.getPwd() + " - " + a.getEmail() + " - " + a.getUsertype() + " - ");
            }

        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return listaNombresTusers;
    }

    public ArrayList<Integer> obtenerkneys(Integer iduser) {
        ArrayList<Integer> allknkeys = new ArrayList<Integer>();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCIONAR_KNKEYS;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(index++, iduser);

            rs = ps.executeQuery();
            allknkeys = AdaptadorAssign.obtenerKnkeys(rs);
        } catch (SQLException ex) {
           
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return allknkeys;
    }

    public T_usersBean obtenerDataFromTusers(String nombreocorreo) {
        T_usersBean t_usersBean = new T_usersBean();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCT_DATAFROM_TUSERS;
        int index = 1;

        String newnombreocorreo = nombreocorreo.replace(" ", "%");

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setString(index++, "%" + newnombreocorreo + "%");
            ps.setString(index++, "%" + newnombreocorreo + "%");

            rs = ps.executeQuery();
            t_usersBean = AdaptadorAssign.obtenerDateFromTusers(rs);
        } catch (SQLException ex) {
        
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return t_usersBean;
    }

    public T_usersBean obtenerDataUsersFromKnkey(Integer idUser) {
        T_usersBean t_usersBean = new T_usersBean();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCT_DATAFROM_TUSERS_FROMID;
        int index = 1;


        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(index++, idUser);

            rs = ps.executeQuery();
            t_usersBean = AdaptadorAssign.obtenerDateFromTusers(rs);
        } catch (SQLException ex) {
         
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return t_usersBean;
    }

    public void insertarRelationUserKnkey(Integer iduser, ArrayList<Integer> IdUserTransitionsArry) {
        Joinusertransition joinusertransition = new Joinusertransition();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.INSERT_RELATIONUSERKNKEY;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            for (Integer idUserTArry : IdUserTransitionsArry) {

                ps.setInt(1, iduser);
                ps.setInt(2, idUserTArry);
         
                ps.execute();
            }

        } catch (SQLException ex) {
          
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        //return t_usersBean;
    }

    public void borrarRelationUserKnkey(Integer idNombre, Integer idTransition) {
        Joinusertransition joinusertransition = new Joinusertransition();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.DELETE_RELATIONUSERKNKEY;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);

            ps.setInt(index++, idNombre);
            ps.setInt(index++, idTransition);
            ps.execute();

//            joinusertransition.setIduser(rs.getInt("iduser"));
//            joinusertransition.setIdtransition(rs.getInt("idtransition"));


        } catch (SQLException ex) {
           
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        //return t_usersBean;
    }

    public ArrayList<Integer> obtenerIdTransition(ArrayList<Integer> UpdateKnkeys) {
        ArrayList<Integer> idTransitionArry = new ArrayList<Integer>();
        Integer idTransition = 0;

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_IDTRANSITION_FROM_KNKEY;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);

            for (Integer knkey : UpdateKnkeys) {
                ps.setInt(1, knkey);
                rs = ps.executeQuery();

                while (rs.next()) {
                    idTransition = rs.getInt("id");
                }
                idTransitionArry.add(idTransition);
            }

        } catch (SQLException ex) {
      
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return idTransitionArry;
    }

    public Integer obtenerOneIdTransition(Integer KnkeyDeleted) {
        Integer idTransition = 0;
        //T_usersBean idTransition =new T_usersBean();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_ONE_IDTRANSITION_FROM_KNKEY;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);


            ps.setInt(index++, KnkeyDeleted);
            rs = ps.executeQuery();

            while (rs.next()) {
                idTransition = (rs.getInt("id"));
            }


        } catch (SQLException ex) {
            
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return idTransition;
    }

    public Integer obtenerKnkeyFromTClientes(Integer Knkey) {
        Integer knkeyr = null;
        //T_usersBean idTransition =new T_usersBean();

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_KNKEY_FROM_TCLIENTES;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);

            ps.setInt(index++, Knkey);
            rs = ps.executeQuery();

            while (rs.next()) {
                knkeyr = (rs.getInt("knkey"));
            }


        } catch (SQLException ex) {

            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return knkeyr;
    }

    public ArrayList<ListaTablaBean> obtenerListaTabla(Integer iduser) {
        ArrayList<ListaTablaBean> listaTable = new ArrayList<ListaTablaBean>();
        ArrayList<Integer> listaKnkeys = new ArrayList<Integer>();


        Connection conn = null;
        Connection conn2 = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCIONAR_KNKEYS;
        String sentenciaSQL2 = AssignSql.SELECCIONAR_COMPANY_FROMSTK;
        String sentenciaSQL3 = AssignSql.SELECCIONAR_RESTDATA;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            conn2 = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, iduser);

            rs = ps.executeQuery();
            listaKnkeys = AdaptadorAssign.obtenerKnkeys(rs);

            for (Integer knkey : listaKnkeys) {
                ListaTablaBean listaTablaBean = new ListaTablaBean();
                listaTablaBean.setKnkey(knkey);
                ps = conn.prepareStatement(sentenciaSQL3);
                ps.setInt(1, knkey);

                rs = ps.executeQuery();
                while (rs.next()) {
                    listaTablaBean.setStatus(rs.getString("status"));
                    listaTablaBean.setStatusImple(rs.getString("statusimple"));
                    listaTablaBean.setUpdated(rs.getBoolean("updated"));
                    listaTablaBean.setIdUsuario(iduser);
                }

                ps = conn2.prepareStatement(sentenciaSQL2);
                ps.setInt(1, knkey);

                rs = ps.executeQuery();
                if (rs.next()) {
                    listaTablaBean.setCompanyname(rs.getString("companyname"));
                    listaTablaBean.setCreationdate(rs.getString("creationdate"));
                }
                listaTable.add(listaTablaBean);
            }

        } catch (SQLException ex) {
           
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
            odb.cerrarConnection(conn2);
        }
        return listaTable;
    }

    public String obtenerCompanysNames(ArrayList<Integer> knkeys) {
        String companysNames = "";
        Integer contador = 0;

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_COMPANYNAMES_FROM_KNKEY;

        try {
            conn = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);
            for (Integer knkey : knkeys) {                
                ps.setInt(1, knkey);
                rs = ps.executeQuery();
                while (rs.next()) {
                    companysNames += rs.getString(1) + "\n";
                }
            }
        } catch (SQLException ex) {
           
            throw new CstF2Exception("Error al obtener los companys names por knkey");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return companysNames ;
    }
    

public Boolean existeKnkeyEnTClientes(Integer knkeys) {

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_KNKEY_FROM_TCLIENTES;
        Boolean existe = false;
        try {

            conn = odb.obtenerConexion("db2");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkeys);
            rs = ps.executeQuery();
            while (rs.next()) {
                existe = true;
            }

        } catch (SQLException ex) {
 
            throw new CstF2Exception("Error al obtener los companys names por knkey");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return existe;
    }

    public Boolean existeKnkeyEnTRansition(Integer knkeys) {

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECT_IDTRANSITION_FROM_KNKEY;
        Integer knkey = 0;
        Boolean existe;
        try {

            conn = odb.obtenerConexion("db");
            ps = conn.prepareStatement(sentenciaSQL);
            ps.setInt(1, knkeys);
            rs = ps.executeQuery();
            while (rs.next()) {
                knkey = rs.getInt(1);
            }

            if (knkey == 0) {
                existe = false;
            } else {
                existe = true;
            }
        } catch (SQLException ex) {
            throw new CstF2Exception("Error al obtener los companys names por knkey");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
        }
        return existe;
    }

    public static void main(String[] args) {
        AssignServer as = new AssignServer();

        ArrayList<Integer> knkeys = new ArrayList<Integer>();
        knkeys.add(14);
        knkeys.add(15);
        knkeys.add(8210);
        knkeys.add(10);
        knkeys.add(13);
        knkeys.add(7733);
        knkeys.add(7776);
        knkeys.add(10420);
        knkeys.add(9826);
        knkeys.add(9788);
        knkeys.add(7892);
        knkeys.add(8094);



        System.out.println(as.obtenerCompanysNames(knkeys));
    }
    
    public ArrayList<ListaTablaBean> prueba(String nombre){
        ArrayList<ListaTablaBean> listaTable = new ArrayList<ListaTablaBean>();
        ArrayList<Integer> listaKnkeys = new ArrayList<Integer>();
        
        Connection conn = null;
        Connection conn2 = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sentenciaSQL = AssignSql.SELECCIONAR_CUSTOMERNUM;
        String sentenciaSQL2 = AssignSql.SELECCIONAR_COMPANY_FROMSTK;
        String sentenciaSQL3 = AssignSql.SELECCIONAR_RESTDATA1;
        int index = 1;

        try {
            conn = odb.obtenerConexion("db");
            conn2 = odb.obtenerConexion("db2");
            ps = conn2.prepareStatement(sentenciaSQL);
            ps.setString(1, nombre);

            rs = ps.executeQuery();
            listaKnkeys = AdaptadorAssign.obtenerCustomerNums(rs);

            for (Integer knkey : listaKnkeys) {
                ListaTablaBean listaTablaBean = new ListaTablaBean();
                listaTablaBean.setKnkey(knkey);
                ps = null;
                ps = conn.prepareStatement(sentenciaSQL3);
                ps.setInt(1, knkey);

                rs = null;
                rs = ps.executeQuery();
                while (rs.next()) {
                    listaTablaBean.setStatus(rs.getString("status"));
                    listaTablaBean.setStatusImple(rs.getString("statusimple"));
                    listaTablaBean.setUpdated1(rs.getBoolean("updated1"));
                }
                ps = null;
                ps = conn2.prepareStatement(sentenciaSQL2);
                ps.setInt(1, knkey);

                rs = ps.executeQuery();
                if (rs.next()) {
                    listaTablaBean.setCompanyname(rs.getString("companyname"));
                    listaTablaBean.setCreationdate(rs.getString("creationdate"));
                }

                listaTable.add(listaTablaBean);
            }

        } catch (SQLException ex) {
          
            throw new CstF2Exception("Error al obtener el Usuario desde la base de datos");
        } finally {
            odb.cerrarResultSet(rs);
            odb.cerrarStatement(ps);
            odb.cerrarConnection(conn);
            odb.cerrarConnection(conn2);
        }
        
        return listaTable;
    }
}
